Introduction to Statistics for Data Science I _ Part1
Introduction to Statistics for Data Science I _ Part1
p_new_h
2020 11 15
데이터사이언스를 위한 통계학입문 I
1. 데이터 과학과 통계 - 데이터과학이란 무엇인가
1-1-1 데이터 과학이란
통계학, 데이터마이닝, 빅데이터, 딥러닝, 인공지능 등의 개념을 아우르는 개념
통계적 개념과 지식 – 샘플링, 확률분포, 가설검정, p-value
데이터를 다둘수 있는 기술 (데이터 큐레이션) – 빅데이터 다루기
데이터의 요약된 정보 전달 기술 – 데이터 시각화 (공간지도분석, 다차원그래픽)
데이터윤리, 데이터보안
데이터 도메인에 대한 지식과 분석능력 (현실 문제의 해결능력)
1-1-2 데이터 과학의 예시
- 데이터 분석 결과를 쉽게 이해할 수 있도록 보여주는 것!
- 그래프, 도표, 이미지, 단어 구름 등을 통해 한 눈에 이해할 수 있도록 하는 것!
핀란드의 의료데이터 프로젝트 (FinnGen)
핀란드인(Finnish)과 유전자(Genome)의 합성어.
자발적 참여자의 유전자정보를 수집하고 환자의 의료정보까지 통합구축.
현재 50만명 목표에서 23만명 수집. 그 중 15만명의 유전자정보 보유.
6개월마다 데이터 업데이트 – 전세계 연구자와 공유
관절염/당뇨병 등 자가면역질환 연구 수행중 – 개인 맞춤형 약 개발 추진중
1-1-3 데이터 과학을 위한 통계학 입문
데이터과학을 위한 통계적 개념과 지식
공유데이터와 오픈소스
빅데이터분석을 위한 첫걸음 – 데이터의 중심위치, 산포정도
데이터의 시각화
데이터과학에서 확률분포는 무슨 의미를 전달
1-2 데이터 과학과 통계 - 통계가 상식이 된 사회 -
1-2-1 통계가 왜 필요한가
통계가 왜 필요한가? = 데이터를 올바르게 다룰줄 알면 무엇이 더 좋아지나?
통계는 올바른 의사결정을 돕는다.
요약된 정보 제공
과거 데이터를 통해 미래 데이터를 예측
데이터에 숨겨진 패턴 발견
1-2-2 의사결정애서 통계의 역할
- 고객의 금융 검색 경로를 추적
- 고객 이동경로(Customer Journey) 분석
- 이탈 가능성이 높은 고객을 붙잡고 신규 고객 유입하는데 활용
정부 정책의 근거자료 – 영국의회 노령연금 도입
- 1886년 영국의 사회학자 찰스 부스(Charles Booth)
- 산업혁명으로 부유해진 런던에서 시민 빈곤 상황을 12년간 조사
- 가난을 8단계로 분류하여 절대빈곤이 30.7%에 달한다는 결과를 발표
- 1908년 영국의회의 노령연금 도입
정부 정책의 근거자료 – 서울시 심야버스 노선정책
- 시민들이 사용한 자정~새벽 5시까지의 휴대폰전화 데이터 수집
- 유동인구 분포 및 밀도를 파악하여 유동인구 및 교통수요가 많은 곳에 심야버스 노선 수립
### 1-2-3 요약
- 개인의 일상활동은 데이터화를 통해 예측분석이 가능하도록 수량화, 객관화되어진다.
- 통계는 수많은 데이터로부터 요약된 정보를 제공, 미래 데이터를 예측, 숨겨진 패턴을 발견함으로써 올바른 의사결정을 돕는다. - 통계치는 금융권의 관리전략, 정부 정책 수립, 법정소송에서의 근거자료 등으로 활용될 수 있다.
1-3 데이터 과학과 통계 - 데이터 분석과 윤리 -
1-3-1 데이터의 정직성
한강 수질 검사를 위해 한강물 채취
채취한 한강물을 집에 있던 보온병에 담아 방안에 보관 세계 최고 수질 검사 기관에서분석한 결과, 마셔도 되는 물로 판명됨!
- 왜 신뢰할 수 없을까?
- 데이터를 잘못 수집했다! + 한강이 얼마나 넓은데 어디서 수집?
+ 어제 산성비가 내렸을지도 모르잖아!
+ 손으로 채집하면 어떡해! 오염됐을지도 몰라!
- 데이터를 잘못 보관했다!
+ 보온병에 있던 세균이 옮으면 어떡해?
+ 차가운데 보관해야하는 거 아냐?
+ 다른 사람이 손대지 못하게 안전한 곳에 보관해야지!
- 너무 적은 양의 데이터, 편향된 표본 추출, 데이터의 왜곡 및 훼손 등등
+ 바르지(정직하지) 못한 데이터
+ 데이터분석은 무의미!
- 정직하지 못한 데이터의 주요 원인은 데이터 분석가의
+ 비윤리성
+ 무지함
+ 환경의 제약
1-3-2 기사에 등장하는 통계치 해석과 평가
- 동등한 조건으로 비교 필요 (주5일 근무)
- 근로 시간이 적은 비정규직의 월급여가 전일제인 정규직의 월급여보다 적은 것은 당연한 결과
- 성, 연령, 근속년수 등의 요인을 통제한 후 시급으로 비교하는 것이 적합
- 편향된 표본 추출
- 알고보니 세무사 39명을 대상으로 조사
- 그중 연봉이 3억~4억원대인 자영업 세무사가 우연히 많았던 것
1-3-3 요약
데이터과학의 윤리는 데이터를 올바르게 분석할 뿐만 아니라 올바른 방법으로 데이터를 수집해야 함을 의미한다.
정직하지 못한 데이터의 주요 원인은 데이터분석자의 무지함, 비윤리성, 그리고 환경의 제약에 의한다.
데이터 수집 시 너무 적은 양의 데이터, 편향된 표본 추출, 데이터의 왜곡 및 훼손에 주의해야 한다.
- 저작권자가 소스 코드를 공개하여 누구나 복제, 개작, 배포할 수 있는 소프트웨어
- R, Python : 오픈소스 통계분석 프로그램
- C++, 자바, 파이썬 등 다른 프로그래밍 언어와 쉽게 연동
- 빅데이터 시스템인 스파크와도 일부 기능을 연동함으로써 응용범위가 더욱 넓어짐
1-4-5 인공지능에서의 오픈소스
- 구글은 머신러닝과 신경망 연구를 위한 소프트웨어 텐서플로우를 오픈소스로 공개
- 구글 딥마인드는 인공지능 개발 플랫폼인 딥마인드랩을 공개해 누구나 인공지능 알고리즘을 테스트해볼 수 있게 함
1-4-6 공유데이터 vs. 오픈소스
공유데이터 : 단순히 수치로 표현되는 측정치 또는 결과 값으로 표현
오픈소스 : 단순 데이터가 아닌 지적 창작물
1-4-7 GitHub란
• 2008년 미국 Github사에서 서비스를 시작 • 현재 전세계에서 오픈소스 프로젝트 관리를 위해 가장 맣이 사용되는 웹호스팅 서비스!! • Git은 2005년 리눅스 제작자인 리누스 토발즈가 개발
Git : 프로그램 등의 소스 코드 관리를 위한 분산 관리 툴 (프로그램 소스를 공유하고 협업하여 개발할수 있는 버전관리 시스템)
GitHub은 Git에 프로젝트 관리지원기능을 확장한 웹 호스팅 서비스. Git을 손쉽게 이용 및 오픈소스 개발자들을 확산하는 데 중요한 역할을 한 웹 서비스
가장 인기있는 오픈 소스 코드 저장소
깃허브 사용자는 2,800만 명 이상, 깃허브에 내에 저장된 소스코드 저장소는 약 5,700만 개
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
이 문서는 Kaggle을 통해 코딩실력을 기르고 싶어 캐글 그랜드마스터이신 ‘이유한 박사’ 님의 방법을 따라하는 것으로 캐글의 데이터들을 필사적으로 필사하면서 코딩 공부를 하는 문서입니다.
영어로 써진 원문은 파파고를 활용해서 한국어로 번역하려고 노력했습니다.
II. Kaggle KPI 설치
Google Colab에서 Kaggle API를 불러오려면 다음 소스코드를 실행한다.
1
!pip install kaggle
Requirement already satisfied: kaggle in /usr/local/lib/python3.6/dist-packages (1.5.9)
Requirement already satisfied: slugify in /usr/local/lib/python3.6/dist-packages (from kaggle) (0.0.1)
Requirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from kaggle) (4.41.1)
Requirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from kaggle) (2.23.0)
Requirement already satisfied: python-dateutil in /usr/local/lib/python3.6/dist-packages (from kaggle) (2.8.1)
Requirement already satisfied: certifi in /usr/local/lib/python3.6/dist-packages (from kaggle) (2020.6.20)
Requirement already satisfied: urllib3 in /usr/local/lib/python3.6/dist-packages (from kaggle) (1.24.3)
Requirement already satisfied: six>=1.10 in /usr/local/lib/python3.6/dist-packages (from kaggle) (1.15.0)
Requirement already satisfied: python-slugify in /usr/local/lib/python3.6/dist-packages (from kaggle) (4.0.1)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->kaggle) (2.10)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->kaggle) (3.0.4)
Requirement already satisfied: text-unidecode>=1.3 in /usr/local/lib/python3.6/dist-packages (from python-slugify->kaggle) (1.3)
III. Kaggle Token 다운로드
Kaggle에서 API Token을 다운로드 받는다.
[Kaggle]-[My Account]-[API]-[Create New API Token]을 누르면 kaggle.json 파일이 다운로드 된다.
이 파일을 바탕화면에 옮긴 뒤, 아래 코드를 실행 시킨다.
Part1 : Exploratory Data Analysis(EDA)
1 2 3 4 5 6 7 8
from google.colab import files uploaded = files.upload() for fn in uploaded.keys(): print('uploaded file "{name}" with length {length} bytes'.format( name=fn, length=len(uploaded[fn]))) # kaggle.json을 아래 폴더로 옮긴 뒤, file을 사용할 수 있도록 권한을 부여한다. !mkdir -p ~/.kaggle/ && mv kaggle.json ~/.kaggle/ && chmod 600 ~/.kaggle/kaggle.json
Saving kaggle.json to kaggle.json
uploaded file "kaggle.json" with length 68 bytes
Warning: Looks like you're using an outdated API Version, please consider updating (server 1.5.9 / client 1.5.4)
test.csv: Skipping, found more recently modified local copy (use --force to force download)
train.csv: Skipping, found more recently modified local copy (use --force to force download)
gender_submission.csv: Skipping, found more recently modified local copy (use --force to force download)
Sex Survived
female 0 81
1 233
male 0 468
1 109
Name: Survived, dtype: int64
1 2 3 4 5 6
f,ax=plt.subplots(1,2,figsize=(18,8)) # 도표 생성 data[['Sex', 'Survived']].groupby(['Sex']).mean().plot.bar(ax=ax[0]) # 성별에 따른 생존자 시각화 ax[0].set_title('Survived vs Sex') # 제목 생성 sns.countplot('Sex', hue='Survived', data=data,ax=ax[1]) # 우측 도표에 생존자 사망자 비교 그래프 생성 ax[1].set_title('Sex:Survived vs Dead') plt.show()
배에 타고 있는 남성의 숫자가 훨씬 많은 반면 구조된 여성의 수는 구조된 남성의 수보다 거의 두배나 많다. 배에 타고 있는 여성의 생존율을 약 75%인 반면 남성은 약 18~19%이다. 이것은 모델링을 위해 매우 중요한 특징으로 보인다. 하지만 그게 최고일까? 다른 기능을 확인해보자.
우리는 1등급 객실의 여성 생존률이 95~96%인 것을 알 수 있다. 94명 중에 고작 3명 밖에 안죽었다. 남성과의 비교를 통해 객실의 관계없이 구조하는 동안 여성에게 우선권이 주어졌다는 것은 명백하다. 심지어 1등급 객실에서도 남성들의 생존율이 매우 낮다.
이를 통해 객실등급이 중요한 특성이라는 것을 확인할 수 있었다. 다른 특성을 확인해보자.
나이 특징
1 2 3 4
print('Oldest Passenger was of :', data['Age'].max(),'Years') print('Youngest Passenger was of :', data['Age'].min(),'Years') print('Average Age on the ship :', data['Age'].mean(),'Years')
Oldest Passenger was of : 80.0 Years
Youngest Passenger was of : 0.42 Years
Average Age on the ship : 29.69911764705882 Years
1 2 3 4 5 6 7 8
f,ax=plt.subplots(1,2,figsize=(18,8)) sns.violinplot("Pclass","Age", hue="Survived", data=data,split=True, ax=ax[0]) ax[0].set_title("Pclass and Age vs Survived") ax[0].set_yticks(range(0,110,10)) # y축 범위 설정 sns.violinplot("Sex", "Age", hue="Survived", data = data, split=True, ax=ax[1]) ax[1].set_title('Sex and Age vs Survived') ax[1].set_yticks(range(0,110,10)) plt.show()
관찰결과)
객실 등급에 따라 자녀 수가 증가하고 10세 미만의 승객 생존률은 객실 등급에 관계없이 양호한 것으로 보인다.
1등급 객실에서 20~50세 승객의 생존 가능성은 높고 여성에게는 더욱 좋다.
남성의 경우 나이가 많을 수록 생존가능성은 줄어든다.
우리는 이전에 Age 177개의 결측값이 있던 것을 확인했다. 우리는 여기에 평균값을 넣어줄 수 있다.
하지만 우리는 이 때 나이가 적거나 낮은 사람에게 적절하지 않은 평균을 넣으면 문제가 생길 수 있다는 것을 알고있다. 그러면 고객의 연령대를 예측할 수 있는 방법은 없을까?
있다! 우리는 승객 이름의 특징을 확인할 수 있다. 우리는 승객들의 이름에 Mr 또는 Mrs등의 특징이 있다는 것을 알수 있다. 따라서 우리는 Mr, Mrs의 평균값을 각 그룹에 할당할 수 있다.
이름에 무엇이 붙는 가 특징!!
1 2 3
data['Initial']=0 for i in data: data['Initial']=data.Name.str.extract('([A-Za-z]+)\.')
자, 이제 Regex를 사용합시다. A-Z 또는 a-z사이에 있는 문자열을 찾고, 그 뒤에 .(점)이 있는 문자열을 찾는 겁니다. 그래서 우리는 이름에서 이니셜을 성공적으로 추출했다.
1 2
pd.crosstab(data.Initial, data.Sex).T.style.background_gradient(cmap='summer_r') # 성별에 있는 이니셜 체크
f,ax=plt.subplots(1,2,figsize=(20,8)) sns.barplot('Parch', 'Survived', data=data, ax=ax[0]) ax[0].set_title('parch vs Survived') sns.factorplot('Parch', 'Survived', data=data, ax=ax[1]) ax[1].set_title('Parch vs Survived') plt.close(2) plt.show()
관찰결과 :
부모를 동반한 승객은 생존 가능성이 더 크다. 하지만 가족의 숫자가 늘어날 수록 생존가능성은 줄어든다.
생존 가능성은 배 안에 1~3명의 부모를 둔 사람에게 좋다. 혼자라는 것은 또한 치명적이고 누군가가 배에 4명 이상의 부모를 두고 있을 때 생존 가능성은 줄어든다.
Posted Updated 8 hours read (About 74050 words)
KDX 소비트랜드 시각화 경진대회 우수상 후기
KDX 소비트랜드 시각화 경진대회 우수상 후기
p_new_h
2020 11 11
KDX 소비트랜드 시각화 경진대회 우수상 후기
대회 참가배경
나는 현재 평택시에서 국비로 지원해주는 4차 산업혁명 우수인재 발굴 교육을 수강중에 있다.
이 과정을 참여하면서 마치 고등학교 시절로 돌아간 것처럼 정신없이 공부를 하고 있다. 나는 이 과정을 통해서
- ERP 정보관리사 자격증 취득
- 빅데이터 관련 공모전 참여
- ADsP(빅데이터 분석 준전문가)자격증 취득
을 도전하고 있는데 현재까지 ERP 정보관리사 자격증은 취득을 완료하였고, 빅데이터 관련 공모전은 1개를 나가고 2번째 공모전을 준비중에 있다. ADsP 자격증은 현재 공부중으로 다음주 일요일에 시험을 볼 예정이다.
무튼! 우리가 처음 참여했던 공모전이 바로 ‘KDX 2020소비트랜드 시각화경진대회’ 였다. 우리가 R이라는 데이터 분석 프로그램을 배운지 정확히 1주일도 채 되지 않았을 무렵 우리는 “일단 실전에 부딪히면서 배워서 금방 실력이 는다”는 강사님의 무시무시한 말과 함께 추천해주시는 공모전에 참가신청서를 넣었다.
팀 참가가 가능했기에 우리는 최대한 모자란 힘을 보태고자 3명이서 팀을 이루어 참가를 했고, 대략 10일 가량의 준비기간을 가질 수 있었다.
다행히(?) 강사님의 배려로 인해 수업 시간 중간 중간 공모전을 준비할 시간을 가질 수 있었고, 우리는 데이터를 확인하면서 우리의 방향성을 잡았다.